package grupod.dp1;
import HibernateConfig.HibernateUtil;
import controller.HistorialVueloController;
import controller.VueloController;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JOptionPane;
import model.Algoritmo;
import model.Arista;
import model.Carga;
import model.FechasDeVuelos;
import model.HistorialVuelo;
import model.Nodo;
import model.Permiso;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import view.*;


public class Main {

    public static void main(String[] args){
       
        try{
            MainApplication app = new MainApplication();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error de Conexión");
        }
        
        
        // todo esto es un codigo de prueba de la funcionalidad de hibernate
        // int codigo;
        // codigo = guardaPermiso("Prueba1");
        // System.out.println(codigo);
        
        //abro la ventana de login
//        new Login().setVisible(true);
    
//        Algoritmo.rellenarListaNodos();     // leo archivo de ciudades y relleno lista de nodos
//        Algoritmo.rellenarListaAristas();   // leo archivo de vuelos y relleno lista de vuelos
//        Algoritmo.rellenarListaAristasVecinas();    //calculo la lista de nodos vecinos para cada nodo
//            
//        String pedidoPaquete = "1000007092012010207:06cara";      //pedido de prueba
//        String pedidoPaquete = "1000007662012010308:40bras";      //pedido de prueba
//        String pedidoPaquete = "1000002632012010207:57cara";      //pedido de prueba
//        String pedidoPaquete = "1000005492012010417:21bogo";      //pedido de prueba
//        String rutaPaquete = Algoritmo.algoritmoAEstrella(pedidoPaquete);        // aplico algoritmo a ese paquete
//        System.out.println(rutaPaquete);
    
        //NO USAR codigo para crear historiales de vuelos
//        List<Nodo> listaNodos = new ArrayList<Nodo>();    //lista de nodos del grafo
//        List<Arista> listaAristas = new ArrayList<Arista>(); //lista de aristas del grafo
//        model.Simulacion simu = new model.Simulacion();
//        simu.setListaNodos(listaNodos);
//        simu.setListaAristas(listaAristas);
//        simu.setFechaHoraSim(new Date());
//        
//        Carga.rellenarListaNodosDesdeBD(simu);
//        Carga.rellenarListaAristasDesdeBD(simu);
//        Carga.rellenarListaAristasVecinas(simu);
//        FechasDeVuelos.GenerarMeses(simu,1);
//        
//        for (int i=0; i<simu.getListaAristas().size(); i++){
//            Iterator<HistorialVuelo> iterador = simu.getListaAristas().get(i).getVuelo().getHistorialVuelos().iterator();
//            while(iterador.hasNext()){
//                HistorialVuelo temp = iterador.next();
//                HistorialVueloController.guardarHistorialVueloEnBD(temp);
//            }
//        }
        
        //NO USAR codigo para cargar plan de vuelos
//        List<Nodo> listaNodos = new ArrayList<Nodo>();    //lista de nodos del grafo
//        List<Arista> listaAristas = new ArrayList<Arista>(); //lista de aristas del grafo
//        model.Simulacion simu = new model.Simulacion();
//        simu.setListaNodos(listaNodos);
//        simu.setListaAristas(listaAristas);
//        simu.setFechaHoraSim(new Date());
//        
//        Carga.rellenarListaNodosDesdeBD(simu);
//        Carga.rellenarListaAristas(simu);
//        for (int i=0; i<simu.getListaAristas().size(); i++){
//            VueloController.guardarVueloEnBD(simu.getListaAristas().get(i).getVuelo());
//        }
    }
    
    // FUNCION DE PRUEBA, usada para probar el Hibernate, no considerarla para el proyecto final
    public static int guardaPermiso(String descripcion){
        
        Session sesion = HibernateUtil.getSessionFactory().openSession();
        Transaction transaccion = null;
        int codigo = 0;
//        
//        try{
//            transaccion = sesion.beginTransaction();
//            
//            // creo objeto y lo lleno
//            Permiso permiso = new Permiso();
//            permiso.setDescripcion(descripcion);
//            
//            // guardo el objeto en la BD
//            codigo = (int)sesion.save(permiso);
//            
//            // commit
//            transaccion.commit();
//        }catch (HibernateException e){
//            // en caso algo falla, hago rollback a la BD
//            transaccion.rollback();
//            e.printStackTrace();    //imprimo errores
//        }finally{
//            //cierro la sesion de la BD
//            sesion.close();
//        }
        
        
        return codigo;
    }
    
}
